{
  "Lucene.Net.Analysis.Phonetic.BeiderMorseFilter.html": {
    "href": "Lucene.Net.Analysis.Phonetic.BeiderMorseFilter.html",
    "title": "Class BeiderMorseFilter | Apache Lucene.NET 4.8.0-beta00009 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 Lucene.Net.Util.AttributeSource Lucene.Net.Analysis.TokenStream Lucene.Net.Analysis.TokenFilter BeiderMorseFilter Implements System.IDisposable Inherited Members Lucene.Net.Analysis.TokenFilter.m_input Lucene.Net.Analysis.TokenFilter.End() TokenFilter.Dispose(Boolean) Lucene.Net.Analysis.TokenStream.Dispose() Lucene.Net.Util.AttributeSource.GetAttributeFactory() Lucene.Net.Util.AttributeSource.GetAttributeClassesEnumerator() Lucene.Net.Util.AttributeSource.GetAttributeImplsEnumerator() Lucene.Net.Util.AttributeSource.AddAttributeImpl(Lucene.Net.Util.Attribute) Lucene.Net.Util.AttributeSource.AddAttribute<T>() Lucene.Net.Util.AttributeSource.HasAttributes Lucene.Net.Util.AttributeSource.HasAttribute<T>() Lucene.Net.Util.AttributeSource.GetAttribute<T>() Lucene.Net.Util.AttributeSource.ClearAttributes() Lucene.Net.Util.AttributeSource.CaptureState() Lucene.Net.Util.AttributeSource.RestoreState(Lucene.Net.Util.AttributeSource.State) Lucene.Net.Util.AttributeSource.GetHashCode() AttributeSource.Equals(Object) AttributeSource.ReflectAsString(Boolean) Lucene.Net.Util.AttributeSource.ReflectWith(Lucene.Net.Util.IAttributeReflector) Lucene.Net.Util.AttributeSource.CloneAttributes() Lucene.Net.Util.AttributeSource.CopyTo(Lucene.Net.Util.AttributeSource) Lucene.Net.Util.AttributeSource.ToString() System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Analysis.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 Lucene.Net.Analysis.TokenStream input Lucene.Net.Analysis.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 Lucene.Net.Analysis.TokenStream input Lucene.Net.Analysis.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 Lucene.Net.Analysis.TokenStream.IncrementToken() | Improve this Doc View Source Reset() Declaration public override void Reset() Overrides Lucene.Net.Analysis.TokenFilter.Reset() Implements System.IDisposable See Also BeiderMorseEncoder"
  },
  "Lucene.Net.Analysis.Phonetic.BeiderMorseFilterFactory.html": {
    "href": "Lucene.Net.Analysis.Phonetic.BeiderMorseFilterFactory.html",
    "title": "Class BeiderMorseFilterFactory | Apache Lucene.NET 4.8.0-beta00009 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 Lucene.Net.Analysis.Util.AbstractAnalysisFactory Lucene.Net.Analysis.Util.TokenFilterFactory BeiderMorseFilterFactory Inherited Members Lucene.Net.Analysis.Util.TokenFilterFactory.ForName(System.String, System.Collections.Generic.IDictionary<System.String, System.String>) Lucene.Net.Analysis.Util.TokenFilterFactory.LookupClass(System.String) Lucene.Net.Analysis.Util.TokenFilterFactory.AvailableTokenFilters Lucene.Net.Analysis.Util.TokenFilterFactory.ReloadTokenFilters() Lucene.Net.Analysis.Util.AbstractAnalysisFactory.LUCENE_MATCH_VERSION_PARAM Lucene.Net.Analysis.Util.AbstractAnalysisFactory.m_luceneMatchVersion Lucene.Net.Analysis.Util.AbstractAnalysisFactory.OriginalArgs Lucene.Net.Analysis.Util.AbstractAnalysisFactory.AssureMatchVersion() Lucene.Net.Analysis.Util.AbstractAnalysisFactory.LuceneMatchVersion Lucene.Net.Analysis.Util.AbstractAnalysisFactory.Require(System.Collections.Generic.IDictionary<System.String, System.String>, System.String) Lucene.Net.Analysis.Util.AbstractAnalysisFactory.Require(System.Collections.Generic.IDictionary<System.String, System.String>, System.String, System.Collections.Generic.ICollection<System.String>) Lucene.Net.Analysis.Util.AbstractAnalysisFactory.Require(System.Collections.Generic.IDictionary<System.String, System.String>, System.String, System.Collections.Generic.ICollection<System.String>, System.Boolean) Lucene.Net.Analysis.Util.AbstractAnalysisFactory.Get(System.Collections.Generic.IDictionary<System.String, System.String>, System.String, System.String) Lucene.Net.Analysis.Util.AbstractAnalysisFactory.Get(System.Collections.Generic.IDictionary<System.String, System.String>, System.String, System.Collections.Generic.ICollection<System.String>) Lucene.Net.Analysis.Util.AbstractAnalysisFactory.Get(System.Collections.Generic.IDictionary<System.String, System.String>, System.String, System.Collections.Generic.ICollection<System.String>, System.String) Lucene.Net.Analysis.Util.AbstractAnalysisFactory.Get(System.Collections.Generic.IDictionary<System.String, System.String>, System.String, System.Collections.Generic.ICollection<System.String>, System.String, System.Boolean) Lucene.Net.Analysis.Util.AbstractAnalysisFactory.RequireInt32(System.Collections.Generic.IDictionary<System.String, System.String>, System.String) Lucene.Net.Analysis.Util.AbstractAnalysisFactory.GetInt32(System.Collections.Generic.IDictionary<System.String, System.String>, System.String, System.Int32) Lucene.Net.Analysis.Util.AbstractAnalysisFactory.RequireBoolean(System.Collections.Generic.IDictionary<System.String, System.String>, System.String) Lucene.Net.Analysis.Util.AbstractAnalysisFactory.GetBoolean(System.Collections.Generic.IDictionary<System.String, System.String>, System.String, System.Boolean) Lucene.Net.Analysis.Util.AbstractAnalysisFactory.RequireSingle(System.Collections.Generic.IDictionary<System.String, System.String>, System.String) Lucene.Net.Analysis.Util.AbstractAnalysisFactory.GetSingle(System.Collections.Generic.IDictionary<System.String, System.String>, System.String, System.Single) Lucene.Net.Analysis.Util.AbstractAnalysisFactory.RequireChar(System.Collections.Generic.IDictionary<System.String, System.String>, System.String) Lucene.Net.Analysis.Util.AbstractAnalysisFactory.GetChar(System.Collections.Generic.IDictionary<System.String, System.String>, System.String, System.Char) Lucene.Net.Analysis.Util.AbstractAnalysisFactory.GetSet(System.Collections.Generic.IDictionary<System.String, System.String>, System.String) Lucene.Net.Analysis.Util.AbstractAnalysisFactory.GetPattern(System.Collections.Generic.IDictionary<System.String, System.String>, System.String) Lucene.Net.Analysis.Util.AbstractAnalysisFactory.GetCulture(System.Collections.Generic.IDictionary<System.String, System.String>, System.String, System.Globalization.CultureInfo) Lucene.Net.Analysis.Util.AbstractAnalysisFactory.GetWordSet(Lucene.Net.Analysis.Util.IResourceLoader, System.String, System.Boolean) Lucene.Net.Analysis.Util.AbstractAnalysisFactory.GetLines(Lucene.Net.Analysis.Util.IResourceLoader, System.String) Lucene.Net.Analysis.Util.AbstractAnalysisFactory.GetSnowballWordSet(Lucene.Net.Analysis.Util.IResourceLoader, System.String, System.Boolean) Lucene.Net.Analysis.Util.AbstractAnalysisFactory.SplitFileNames(System.String) Lucene.Net.Analysis.Util.AbstractAnalysisFactory.GetClassArg() Lucene.Net.Analysis.Util.AbstractAnalysisFactory.IsExplicitLuceneMatchVersion System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Analysis.Phonetic Assembly : Lucene.Net.Analysis.Phonetic.dll Syntax public class BeiderMorseFilterFactory : TokenFilterFactory Constructors | Improve this Doc View Source BeiderMorseFilterFactory(IDictionary<String, String>) Creates a new BeiderMorseFilterFactory Declaration public BeiderMorseFilterFactory(IDictionary<string, string> args) Parameters Type Name Description System.Collections.Generic.IDictionary < System.String , System.String > args Methods | Improve this Doc View Source Create(TokenStream) Declaration public override TokenStream Create(TokenStream input) Parameters Type Name Description Lucene.Net.Analysis.TokenStream input Returns Type Description Lucene.Net.Analysis.TokenStream Overrides Lucene.Net.Analysis.Util.TokenFilterFactory.Create(Lucene.Net.Analysis.TokenStream)"
  },
  "Lucene.Net.Analysis.Phonetic.DoubleMetaphoneFilter.html": {
    "href": "Lucene.Net.Analysis.Phonetic.DoubleMetaphoneFilter.html",
    "title": "Class DoubleMetaphoneFilter | Apache Lucene.NET 4.8.0-beta00009 Documentation",
    "keywords": "Class DoubleMetaphoneFilter Filter for DoubleMetaphone (supporting secondary codes) Inheritance System.Object Lucene.Net.Util.AttributeSource Lucene.Net.Analysis.TokenStream Lucene.Net.Analysis.TokenFilter DoubleMetaphoneFilter Implements System.IDisposable Inherited Members Lucene.Net.Analysis.TokenFilter.m_input Lucene.Net.Analysis.TokenFilter.End() TokenFilter.Dispose(Boolean) Lucene.Net.Analysis.TokenStream.Dispose() Lucene.Net.Util.AttributeSource.GetAttributeFactory() Lucene.Net.Util.AttributeSource.GetAttributeClassesEnumerator() Lucene.Net.Util.AttributeSource.GetAttributeImplsEnumerator() Lucene.Net.Util.AttributeSource.AddAttributeImpl(Lucene.Net.Util.Attribute) Lucene.Net.Util.AttributeSource.AddAttribute<T>() Lucene.Net.Util.AttributeSource.HasAttributes Lucene.Net.Util.AttributeSource.HasAttribute<T>() Lucene.Net.Util.AttributeSource.GetAttribute<T>() Lucene.Net.Util.AttributeSource.ClearAttributes() Lucene.Net.Util.AttributeSource.CaptureState() Lucene.Net.Util.AttributeSource.RestoreState(Lucene.Net.Util.AttributeSource.State) Lucene.Net.Util.AttributeSource.GetHashCode() AttributeSource.Equals(Object) AttributeSource.ReflectAsString(Boolean) Lucene.Net.Util.AttributeSource.ReflectWith(Lucene.Net.Util.IAttributeReflector) Lucene.Net.Util.AttributeSource.CloneAttributes() Lucene.Net.Util.AttributeSource.CopyTo(Lucene.Net.Util.AttributeSource) Lucene.Net.Util.AttributeSource.ToString() System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Analysis.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 Lucene.Net.Analysis.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 Lucene.Net.Analysis.TokenStream.IncrementToken() | Improve this Doc View Source Reset() Declaration public override void Reset() Overrides Lucene.Net.Analysis.TokenFilter.Reset() Implements System.IDisposable"
  },
  "Lucene.Net.Analysis.Phonetic.DoubleMetaphoneFilterFactory.html": {
    "href": "Lucene.Net.Analysis.Phonetic.DoubleMetaphoneFilterFactory.html",
    "title": "Class DoubleMetaphoneFilterFactory | Apache Lucene.NET 4.8.0-beta00009 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 Lucene.Net.Analysis.Util.AbstractAnalysisFactory Lucene.Net.Analysis.Util.TokenFilterFactory DoubleMetaphoneFilterFactory Inherited Members Lucene.Net.Analysis.Util.TokenFilterFactory.ForName(System.String, System.Collections.Generic.IDictionary<System.String, System.String>) Lucene.Net.Analysis.Util.TokenFilterFactory.LookupClass(System.String) Lucene.Net.Analysis.Util.TokenFilterFactory.AvailableTokenFilters Lucene.Net.Analysis.Util.TokenFilterFactory.ReloadTokenFilters() Lucene.Net.Analysis.Util.AbstractAnalysisFactory.LUCENE_MATCH_VERSION_PARAM Lucene.Net.Analysis.Util.AbstractAnalysisFactory.m_luceneMatchVersion Lucene.Net.Analysis.Util.AbstractAnalysisFactory.OriginalArgs Lucene.Net.Analysis.Util.AbstractAnalysisFactory.AssureMatchVersion() Lucene.Net.Analysis.Util.AbstractAnalysisFactory.LuceneMatchVersion Lucene.Net.Analysis.Util.AbstractAnalysisFactory.Require(System.Collections.Generic.IDictionary<System.String, System.String>, System.String) Lucene.Net.Analysis.Util.AbstractAnalysisFactory.Require(System.Collections.Generic.IDictionary<System.String, System.String>, System.String, System.Collections.Generic.ICollection<System.String>) Lucene.Net.Analysis.Util.AbstractAnalysisFactory.Require(System.Collections.Generic.IDictionary<System.String, System.String>, System.String, System.Collections.Generic.ICollection<System.String>, System.Boolean) Lucene.Net.Analysis.Util.AbstractAnalysisFactory.Get(System.Collections.Generic.IDictionary<System.String, System.String>, System.String, System.String) Lucene.Net.Analysis.Util.AbstractAnalysisFactory.Get(System.Collections.Generic.IDictionary<System.String, System.String>, System.String, System.Collections.Generic.ICollection<System.String>) Lucene.Net.Analysis.Util.AbstractAnalysisFactory.Get(System.Collections.Generic.IDictionary<System.String, System.String>, System.String, System.Collections.Generic.ICollection<System.String>, System.String) Lucene.Net.Analysis.Util.AbstractAnalysisFactory.Get(System.Collections.Generic.IDictionary<System.String, System.String>, System.String, System.Collections.Generic.ICollection<System.String>, System.String, System.Boolean) Lucene.Net.Analysis.Util.AbstractAnalysisFactory.RequireInt32(System.Collections.Generic.IDictionary<System.String, System.String>, System.String) Lucene.Net.Analysis.Util.AbstractAnalysisFactory.GetInt32(System.Collections.Generic.IDictionary<System.String, System.String>, System.String, System.Int32) Lucene.Net.Analysis.Util.AbstractAnalysisFactory.RequireBoolean(System.Collections.Generic.IDictionary<System.String, System.String>, System.String) Lucene.Net.Analysis.Util.AbstractAnalysisFactory.GetBoolean(System.Collections.Generic.IDictionary<System.String, System.String>, System.String, System.Boolean) Lucene.Net.Analysis.Util.AbstractAnalysisFactory.RequireSingle(System.Collections.Generic.IDictionary<System.String, System.String>, System.String) Lucene.Net.Analysis.Util.AbstractAnalysisFactory.GetSingle(System.Collections.Generic.IDictionary<System.String, System.String>, System.String, System.Single) Lucene.Net.Analysis.Util.AbstractAnalysisFactory.RequireChar(System.Collections.Generic.IDictionary<System.String, System.String>, System.String) Lucene.Net.Analysis.Util.AbstractAnalysisFactory.GetChar(System.Collections.Generic.IDictionary<System.String, System.String>, System.String, System.Char) Lucene.Net.Analysis.Util.AbstractAnalysisFactory.GetSet(System.Collections.Generic.IDictionary<System.String, System.String>, System.String) Lucene.Net.Analysis.Util.AbstractAnalysisFactory.GetPattern(System.Collections.Generic.IDictionary<System.String, System.String>, System.String) Lucene.Net.Analysis.Util.AbstractAnalysisFactory.GetCulture(System.Collections.Generic.IDictionary<System.String, System.String>, System.String, System.Globalization.CultureInfo) Lucene.Net.Analysis.Util.AbstractAnalysisFactory.GetWordSet(Lucene.Net.Analysis.Util.IResourceLoader, System.String, System.Boolean) Lucene.Net.Analysis.Util.AbstractAnalysisFactory.GetLines(Lucene.Net.Analysis.Util.IResourceLoader, System.String) Lucene.Net.Analysis.Util.AbstractAnalysisFactory.GetSnowballWordSet(Lucene.Net.Analysis.Util.IResourceLoader, System.String, System.Boolean) Lucene.Net.Analysis.Util.AbstractAnalysisFactory.SplitFileNames(System.String) Lucene.Net.Analysis.Util.AbstractAnalysisFactory.GetClassArg() Lucene.Net.Analysis.Util.AbstractAnalysisFactory.IsExplicitLuceneMatchVersion System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Analysis.Phonetic Assembly : Lucene.Net.Analysis.Phonetic.dll Syntax public class DoubleMetaphoneFilterFactory : TokenFilterFactory Constructors | Improve this Doc View Source DoubleMetaphoneFilterFactory(IDictionary<String, String>) Creates a new DoubleMetaphoneFilterFactory Declaration public DoubleMetaphoneFilterFactory(IDictionary<string, string> args) Parameters Type Name Description System.Collections.Generic.IDictionary < System.String , System.String > args Fields | Improve this Doc View Source DEFAULT_MAX_CODE_LENGTH default maxCodeLength if not specified Declaration public static readonly int DEFAULT_MAX_CODE_LENGTH Field Value Type Description System.Int32 | Improve this Doc View Source INJECT parameter name: true if encoded tokens should be added as synonyms Declaration public static readonly string INJECT Field Value Type Description System.String | Improve this Doc View Source MAX_CODE_LENGTH parameter name: restricts the length of the phonetic code Declaration public static readonly string MAX_CODE_LENGTH Field Value Type Description System.String Methods | Improve this Doc View Source Create(TokenStream) Declaration public override TokenStream Create(TokenStream input) Parameters Type Name Description Lucene.Net.Analysis.TokenStream input Returns Type Description Lucene.Net.Analysis.TokenStream Overrides Lucene.Net.Analysis.Util.TokenFilterFactory.Create(Lucene.Net.Analysis.TokenStream)"
  },
  "Lucene.Net.Analysis.Phonetic.html": {
    "href": "Lucene.Net.Analysis.Phonetic.html",
    "title": "Namespace Lucene.Net.Analysis.Phonetic | Apache Lucene.NET 4.8.0-beta00009 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 <xref: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>"
  },
  "Lucene.Net.Analysis.Phonetic.Language.AbstractCaverphone.html": {
    "href": "Lucene.Net.Analysis.Phonetic.Language.AbstractCaverphone.html",
    "title": "Class AbstractCaverphone | Apache Lucene.NET 4.8.0-beta00009 Documentation",
    "keywords": "Class AbstractCaverphone Encodes a string into a Caverphone value. This is an algorithm created by the Caversham Project at the University of Otago. It implements the Caverphone 2.0 algorithm: This class is immutable and thread-safe. See Wikipedia - Caverphone Inheritance System.Object AbstractCaverphone Caverphone1 Caverphone2 Implements IStringEncoder Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Analysis.Phonetic.Language Assembly : Lucene.Net.Analysis.Phonetic.dll Syntax public abstract class AbstractCaverphone : IStringEncoder Constructors | Improve this Doc View Source AbstractCaverphone() Creates an instance of the Caverphone encoder Declaration public AbstractCaverphone() Methods | Improve this Doc View Source Encode(String) Declaration public abstract string Encode(string source) Parameters Type Name Description System.String source Returns Type Description System.String | Improve this Doc View Source IsEncodeEqual(String, String) Tests if the encodings of two strings are equal. This method might be promoted to a new AbstractStringEncoder superclass. Declaration public virtual bool IsEncodeEqual(string str1, string str2) Parameters Type Name Description System.String str1 First of two strings to compare. System.String str2 Second of two strings to compare. Returns Type Description System.Boolean true if the encodings of these strings are identical, false otherwise. Implements IStringEncoder"
  },
  "Lucene.Net.Analysis.Phonetic.Language.Bm.BeiderMorseEncoder.html": {
    "href": "Lucene.Net.Analysis.Phonetic.Language.Bm.BeiderMorseEncoder.html",
    "title": "Class BeiderMorseEncoder | Apache Lucene.NET 4.8.0-beta00009 Documentation",
    "keywords": "Class BeiderMorseEncoder Encodes strings into their Beider-Morse phonetic encoding. Inheritance System.Object BeiderMorseEncoder Implements IStringEncoder Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Analysis.Phonetic.Language.Bm Assembly : Lucene.Net.Analysis.Phonetic.dll Syntax public class BeiderMorseEncoder : IStringEncoder Remarks Beider-Morse phonetic encodings are optimised for family names. However, they may be useful for a wide range of words. This encoder is intentionally mutable to allow dynamic configuration through bean properties. As such, it is mutable, and may not be thread-safe. If you require a guaranteed thread-safe encoding then use PhoneticEngine directly. Encoding overview Beider-Morse phonetic encodings is a multi-step process. Firstly, a table of rules is consulted to guess what language the word comes from. For example, if it ends in \" ault \" then it infers that the word is French. Next, the word is translated into a phonetic representation using a language-specific phonetics table. Some runs of letters can be pronounced in multiple ways, and a single run of letters may be potentially broken up into phonemes at different places, so this stage results in a set of possible language-specific phonetic representations. Lastly, this language-specific phonetic representation is processed by a table of rules that re-writes it phonetically taking into account systematic pronunciation differences between languages, to move it towards a pan-indo-european phonetic representation. Again, sometimes there are multiple ways this could be done and sometimes things that can be pronounced in several ways in the source language have only one way to represent them in this average phonetic language, so the result is again a set of phonetic spellings. Some names are treated as having multiple parts. This can be due to two things. Firstly, they may be hyphenated. In this case, each individual hyphenated word is encoded, and then these are combined end-to-end for the final encoding. Secondly, some names have standard prefixes, for example, \" Mac/Mc \" in Scottish (English) names. As sometimes it is ambiguous whether the prefix is intended or is an accident of the spelling, the word is encoded once with the prefix and once without it. The resulting encoding contains one and then the other result. Encoding format Individual phonetic spellings of an input word are represented in upper- and lower-case roman characters. Where there are multiple possible phonetic representations, these are joined with a pipe ( | ) character. If multiple hyphenated words where found, or if the word may contain a name prefix, each encoded word is placed in elipses and these blocks are then joined with hyphens. For example, \" d'ortley \" has a possible prefix. The form without prefix encodes to ortlaj|ortlej , while the form with prefix encodes to dortlaj|dortlej . Thus, the full, combined encoding is (ortlaj|ortlej)-(dortlaj|dortlej) . The encoded forms are often quite a bit longer than the input strings. This is because a single input may have many potential phonetic interpretations. For example, Renault encodes to rYnDlt|rYnalt|rYnult|rinDlt|rinalt|rinult . The APPROX rules will tend to produce larger encodings as they consider a wider range of possible, approximate phonetic interpretations of the original word. Down-stream applications may wish to further process the encoding for indexing or lookup purposes, for example, by splitting on pipe ( | ) and indexing under each of these alternatives. since 1.6 Properties | Improve this Doc View Source IsConcat Gets or Sets how multiple possible phonetic encodings are combined. true if multiple encodings are to be combined with a '|', false if just the first one is to be considered. Declaration public virtual bool IsConcat { get; set; } Property Value Type Description System.Boolean | Improve this Doc View Source NameType Gets or Sets the name type currently in operation. Use GENERIC unless you specifically want phonetic encodings optimized for Ashkenazi or Sephardic Jewish family names. Declaration public virtual NameType NameType { get; set; } Property Value Type Description NameType | Improve this Doc View Source RuleType Gets or Sets the rule type to apply. This will widen or narrow the range of phonetic encodings considered. APPROX or EXACT for approximate or exact phonetic matches. Declaration public virtual RuleType RuleType { get; set; } Property Value Type Description RuleType Methods | Improve this Doc View Source Encode(String) Declaration public virtual string Encode(string source) Parameters Type Name Description System.String source Returns Type Description System.String | Improve this Doc View Source SetMaxPhonemes(Int32) Sets the number of maximum of phonemes that shall be considered by the engine. since 1.7 Declaration public virtual void SetMaxPhonemes(int maxPhonemes) Parameters Type Name Description System.Int32 maxPhonemes the maximum number of phonemes returned by the engine Implements IStringEncoder"
  },
  "Lucene.Net.Analysis.Phonetic.Language.Bm.html": {
    "href": "Lucene.Net.Analysis.Phonetic.Language.Bm.html",
    "title": "Namespace Lucene.Net.Analysis.Phonetic.Language.Bm | Apache Lucene.NET 4.8.0-beta00009 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"
  },
  "Lucene.Net.Analysis.Phonetic.Language.Bm.IPhonemeExpr.html": {
    "href": "Lucene.Net.Analysis.Phonetic.Language.Bm.IPhonemeExpr.html",
    "title": "Interface IPhonemeExpr | Apache Lucene.NET 4.8.0-beta00009 Documentation",
    "keywords": "Interface IPhonemeExpr Namespace : Lucene.Net.Analysis.Phonetic.Language.Bm Assembly : Lucene.Net.Analysis.Phonetic.dll Syntax public interface IPhonemeExpr Properties | Improve this Doc View Source Phonemes Declaration IList<Phoneme> Phonemes { get; } Property Value Type Description System.Collections.Generic.IList < Phoneme >"
  },
  "Lucene.Net.Analysis.Phonetic.Language.Bm.IRPattern.html": {
    "href": "Lucene.Net.Analysis.Phonetic.Language.Bm.IRPattern.html",
    "title": "Interface IRPattern | Apache Lucene.NET 4.8.0-beta00009 Documentation",
    "keywords": "Interface IRPattern A minimal wrapper around the functionality of Rule Pattern that we use, to allow for alternate implementations. Namespace : Lucene.Net.Analysis.Phonetic.Language.Bm Assembly : Lucene.Net.Analysis.Phonetic.dll Syntax public interface IRPattern Methods | Improve this Doc View Source IsMatch(ICharSequence) Declaration bool IsMatch(ICharSequence input) Parameters Type Name Description J2N.Text.ICharSequence input Returns Type Description System.Boolean | Improve this Doc View Source IsMatch(String) Declaration bool IsMatch(string input) Parameters Type Name Description System.String input Returns Type Description System.Boolean | Improve this Doc View Source IsMatch(StringBuilder) Declaration bool IsMatch(StringBuilder input) Parameters Type Name Description System.Text.StringBuilder input Returns Type Description System.Boolean"
  },
  "Lucene.Net.Analysis.Phonetic.Language.Bm.Lang.html": {
    "href": "Lucene.Net.Analysis.Phonetic.Language.Bm.Lang.html",
    "title": "Class Lang | Apache Lucene.NET 4.8.0-beta00009 Documentation",
    "keywords": "Class Lang Language guessing utility. Inheritance System.Object Lang Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Analysis.Phonetic.Language.Bm Assembly : Lucene.Net.Analysis.Phonetic.dll Syntax public class Lang Remarks This class encapsulates rules used to guess the possible languages that a word originates from. This is done by reference to a whole series of rules distributed in resource files. Instances of this class are typically managed through the static factory method GetInstance(NameType) . Unless you are developing your own language guessing rules, you will not need to interact with this class directly. This class is intended to be immutable and thread-safe. Lang resources Language guessing rules are typically loaded from resource files. These are UTF-8 encoded text files. They are systematically named following the pattern: Lucene.Net.Analysis.Phonetic.Language.Bm.lang.txt The format of these resources is the following: Rules: Whitespace separated strings. There should be 3 columns to each row, and these will be interpreted as: pattern:a regular expression. languages:a '+'-separated list of languages. acceptOnMatch:'true' or 'false' indicating if a match rules in or rules out the language. End-of-line comments: Any occurrence of '//' will cause all text following on that line to be discarded as a comment. Multi-line comments: Any line starting with '/ ' will start multi-line commenting mode. This will skip all content until a line ending in ' ' and '/' is found. Blank lines: All blank lines will be skipped. Port of lang.php since 1.6 Methods | Improve this Doc View Source GetInstance(NameType) Gets a Lang instance for one of the supported NameType s. Declaration public static Lang GetInstance(NameType nameType) Parameters Type Name Description NameType nameType The NameType to look up. Returns Type Description Lang A Lang encapsulating the language guessing rules for that name type. | Improve this Doc View Source GuessLanguage(String) Guesses the language of a word. Declaration public virtual string GuessLanguage(string text) Parameters Type Name Description System.String text The word. Returns Type Description System.String The language that the word originates from or ANY if there was no unique match. | Improve this Doc View Source GuessLanguages(String) Guesses the languages of a word. Declaration public virtual LanguageSet GuessLanguages(string input) Parameters Type Name Description System.String input The word. Returns Type Description LanguageSet A Set of Strings of language names that are potential matches for the input word. | Improve this Doc View Source LoadFromResource(String, Languages) Loads language rules from a resource. In normal use, you will obtain instances of Lang through the GetInstance(NameType) method. You will only need to call this yourself if you are developing custom language mapping rules. Declaration public static Lang LoadFromResource(string languageRulesResourceName, Languages languages) Parameters Type Name Description System.String languageRulesResourceName The fully-qualified or partially-qualified resource name to load. Languages languages The languages that these rules will support. Returns Type Description Lang A Lang encapsulating the loaded language-guessing rules."
  },
  "Lucene.Net.Analysis.Phonetic.Language.Bm.Languages.html": {
    "href": "Lucene.Net.Analysis.Phonetic.Language.Bm.Languages.html",
    "title": "Class Languages | Apache Lucene.NET 4.8.0-beta00009 Documentation",
    "keywords": "Class Languages Language codes. Inheritance System.Object Languages Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Analysis.Phonetic.Language.Bm Assembly : Lucene.Net.Analysis.Phonetic.dll Syntax public class Languages Remarks Language codes are typically loaded from resource files. These are UTF-8 encoded text files. They are systematically named following the pattern: Lucene.Net.Analysis.Phonetic.Language.Bm. NameType _languages.txt The format of these resources is the following: Language:A single string containing no whitespace. End-of-line comments:Any occurrence of '//' will cause all text following on that line to be discarded as a comment. Multi-line comments:Any line starting with '/ ' will start multi-line commenting mode. This will skip all content until a line ending in ' ' and '/' is found. Blank lines:All blank lines will be skipped. Ported from language.php This class is immutable and thread-safe. since 1.6 Fields | Improve this Doc View Source ANY Declaration public static readonly string ANY Field Value Type Description System.String | Improve this Doc View Source ANY_LANGUAGE Any/all languages. Declaration public static readonly LanguageSet ANY_LANGUAGE Field Value Type Description LanguageSet | Improve this Doc View Source NO_LANGUAGES No languages at all. Declaration public static readonly LanguageSet NO_LANGUAGES Field Value Type Description LanguageSet Methods | Improve this Doc View Source GetInstance(NameType) Declaration public static Languages GetInstance(NameType nameType) Parameters Type Name Description NameType nameType Returns Type Description Languages | Improve this Doc View Source GetInstance(String) Declaration public static Languages GetInstance(string languagesResourceName) Parameters Type Name Description System.String languagesResourceName Returns Type Description Languages | Improve this Doc View Source GetLanguages() Declaration public virtual ISet<string> GetLanguages() Returns Type Description System.Collections.Generic.ISet < System.String >"
  },
  "Lucene.Net.Analysis.Phonetic.Language.Bm.LanguageSet.html": {
    "href": "Lucene.Net.Analysis.Phonetic.Language.Bm.LanguageSet.html",
    "title": "Class LanguageSet | Apache Lucene.NET 4.8.0-beta00009 Documentation",
    "keywords": "Class LanguageSet A set of languages. Inheritance System.Object LanguageSet SomeLanguages Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Analysis.Phonetic.Language.Bm Assembly : Lucene.Net.Analysis.Phonetic.dll Syntax public abstract class LanguageSet Properties | Improve this Doc View Source IsEmpty Declaration public abstract bool IsEmpty { get; } Property Value Type Description System.Boolean | Improve this Doc View Source IsSingleton Declaration public abstract bool IsSingleton { get; } Property Value Type Description System.Boolean Methods | Improve this Doc View Source Contains(String) Declaration public abstract bool Contains(string language) Parameters Type Name Description System.String language Returns Type Description System.Boolean | Improve this Doc View Source From(ISet<String>) Declaration public static LanguageSet From(ISet<string> langs) Parameters Type Name Description System.Collections.Generic.ISet < System.String > langs Returns Type Description LanguageSet | Improve this Doc View Source GetAny() Declaration public abstract string GetAny() Returns Type Description System.String | Improve this Doc View Source RestrictTo(LanguageSet) Declaration public abstract LanguageSet RestrictTo(LanguageSet other) Parameters Type Name Description LanguageSet other Returns Type Description LanguageSet"
  },
  "Lucene.Net.Analysis.Phonetic.Language.Bm.NameType.html": {
    "href": "Lucene.Net.Analysis.Phonetic.Language.Bm.NameType.html",
    "title": "Enum NameType | Apache Lucene.NET 4.8.0-beta00009 Documentation",
    "keywords": "Enum NameType Supported types of names. Unless you are matching particular family names, use GENERIC . The GENERIC NameType should work reasonably well for non-name words. The other encodings are specifically tuned to family names, and may not work well at all for general text. since 1.6 Namespace : Lucene.Net.Analysis.Phonetic.Language.Bm Assembly : Lucene.Net.Analysis.Phonetic.dll Syntax public enum NameType Fields Name Description ASHKENAZI Ashkenazi family names GENERIC Generic names and words SEPHARDIC Sephardic family names Extension Methods NameTypeExtensions.GetName()"
  },
  "Lucene.Net.Analysis.Phonetic.Language.Bm.NameTypeExtensions.html": {
    "href": "Lucene.Net.Analysis.Phonetic.Language.Bm.NameTypeExtensions.html",
    "title": "Class NameTypeExtensions | Apache Lucene.NET 4.8.0-beta00009 Documentation",
    "keywords": "Class NameTypeExtensions Inheritance System.Object NameTypeExtensions Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Analysis.Phonetic.Language.Bm Assembly : Lucene.Net.Analysis.Phonetic.dll Syntax public static class NameTypeExtensions Methods | Improve this Doc View Source GetName(NameType) Gets the short version of the name type. Declaration public static string GetName(this NameType nameType) Parameters Type Name Description NameType nameType the NameType Returns Type Description System.String the NameType short string"
  },
  "Lucene.Net.Analysis.Phonetic.Language.Bm.Phoneme.html": {
    "href": "Lucene.Net.Analysis.Phonetic.Language.Bm.Phoneme.html",
    "title": "Class Phoneme | Apache Lucene.NET 4.8.0-beta00009 Documentation",
    "keywords": "Class Phoneme Inheritance System.Object Phoneme Implements IPhonemeExpr Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Analysis.Phonetic.Language.Bm Assembly : Lucene.Net.Analysis.Phonetic.dll Syntax public sealed class Phoneme : IPhonemeExpr Constructors | Improve this Doc View Source Phoneme(ICharSequence, LanguageSet) Declaration public Phoneme(ICharSequence phonemeText, LanguageSet languages) Parameters Type Name Description J2N.Text.ICharSequence phonemeText LanguageSet languages | Improve this Doc View Source Phoneme(Phoneme, Phoneme) Declaration public Phoneme(Phoneme phonemeLeft, Phoneme phonemeRight) Parameters Type Name Description Phoneme phonemeLeft Phoneme phonemeRight | Improve this Doc View Source Phoneme(Phoneme, Phoneme, LanguageSet) Declaration public Phoneme(Phoneme phonemeLeft, Phoneme phonemeRight, LanguageSet languages) Parameters Type Name Description Phoneme phonemeLeft Phoneme phonemeRight LanguageSet languages | Improve this Doc View Source Phoneme(String, LanguageSet) Declaration public Phoneme(string phonemeText, LanguageSet languages) Parameters Type Name Description System.String phonemeText LanguageSet languages | Improve this Doc View Source Phoneme(StringBuilder, LanguageSet) Declaration public Phoneme(StringBuilder phonemeText, LanguageSet languages) Parameters Type Name Description System.Text.StringBuilder phonemeText LanguageSet languages Fields | Improve this Doc View Source COMPARER Declaration public static readonly IComparer<Phoneme> COMPARER Field Value Type Description System.Collections.Generic.IComparer < Phoneme > Properties | Improve this Doc View Source Languages Declaration public LanguageSet Languages { get; } Property Value Type Description LanguageSet | Improve this Doc View Source Phonemes Declaration public IList<Phoneme> Phonemes { get; } Property Value Type Description System.Collections.Generic.IList < Phoneme > Methods | Improve this Doc View Source Append(String) Declaration public Phoneme Append(string str) Parameters Type Name Description System.String str Returns Type Description Phoneme | Improve this Doc View Source GetPhonemeText() Declaration public string GetPhonemeText() Returns Type Description System.String | Improve this Doc View Source Join(Phoneme) Declaration [Obsolete(\"since 1.9\")] public Phoneme Join(Phoneme right) Parameters Type Name Description Phoneme right Returns Type Description Phoneme Implements IPhonemeExpr"
  },
  "Lucene.Net.Analysis.Phonetic.Language.Bm.PhonemeList.html": {
    "href": "Lucene.Net.Analysis.Phonetic.Language.Bm.PhonemeList.html",
    "title": "Class PhonemeList | Apache Lucene.NET 4.8.0-beta00009 Documentation",
    "keywords": "Class PhonemeList Inheritance System.Object PhonemeList Implements IPhonemeExpr Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Analysis.Phonetic.Language.Bm Assembly : Lucene.Net.Analysis.Phonetic.dll Syntax public sealed class PhonemeList : IPhonemeExpr Constructors | Improve this Doc View Source PhonemeList(IList<Phoneme>) Declaration public PhonemeList(IList<Phoneme> phonemes) Parameters Type Name Description System.Collections.Generic.IList < Phoneme > phonemes Properties | Improve this Doc View Source Phonemes Declaration public IList<Phoneme> Phonemes { get; } Property Value Type Description System.Collections.Generic.IList < Phoneme > Implements IPhonemeExpr"
  },
  "Lucene.Net.Analysis.Phonetic.Language.Bm.PhoneticEngine.html": {
    "href": "Lucene.Net.Analysis.Phonetic.Language.Bm.PhoneticEngine.html",
    "title": "Class PhoneticEngine | Apache Lucene.NET 4.8.0-beta00009 Documentation",
    "keywords": "Class PhoneticEngine Converts words into potential phonetic representations. Inheritance System.Object PhoneticEngine Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Analysis.Phonetic.Language.Bm Assembly : Lucene.Net.Analysis.Phonetic.dll Syntax public class PhoneticEngine Remarks This is a two-stage process. Firstly, the word is converted into a phonetic representation that takes into account the likely source language. Next, this phonetic representation is converted into a pan-European 'average' representation, allowing comparison between different versions of essentially the same word from different languages. This class is intentionally immutable and thread-safe. If you wish to alter the settings for a PhoneticEngine, you must make a new one with the updated settings. Ported from phoneticengine.php since 1.6 Constructors | Improve this Doc View Source PhoneticEngine(NameType, RuleType, Boolean) Generates a new, fully-configured phonetic engine. Declaration public PhoneticEngine(NameType nameType, RuleType ruleType, bool concat) Parameters Type Name Description NameType nameType The type of names it will use. RuleType ruleType The type of rules it will apply. System.Boolean concat If it will concatenate multiple encodings. | Improve this Doc View Source PhoneticEngine(NameType, RuleType, Boolean, Int32) Generates a new, fully-configured phonetic engine. since 1.7 Declaration public PhoneticEngine(NameType nameType, RuleType ruleType, bool concat, int maxPhonemes) Parameters Type Name Description NameType nameType The type of names it will use. RuleType ruleType The type of rules it will apply. System.Boolean concat If it will concatenate multiple encodings. System.Int32 maxPhonemes The maximum number of phonemes that will be handled. Properties | Improve this Doc View Source IsConcat Gets if multiple phonetic encodings are concatenated or if just the first one is kept. Returns true if multiple phonetic encodings are returned, false if just the first is. Declaration public virtual bool IsConcat { get; } Property Value Type Description System.Boolean | Improve this Doc View Source Lang Gets the Lang language guessing rules being used. Declaration public virtual Lang Lang { get; } Property Value Type Description Lang | Improve this Doc View Source MaxPhonemes Gets the maximum number of phonemes the engine will calculate for a given input. since 1.7 Declaration public virtual int MaxPhonemes { get; } Property Value Type Description System.Int32 | Improve this Doc View Source NameType Gets the NameType being used. Declaration public virtual NameType NameType { get; } Property Value Type Description NameType | Improve this Doc View Source RuleType Gets the RuleType being used. Declaration public virtual RuleType RuleType { get; } Property Value Type Description RuleType Methods | Improve this Doc View Source Encode(String) Encodes a string to its phonetic representation. Declaration public virtual string Encode(string input) Parameters Type Name Description System.String input The string to encode. Returns Type Description System.String The encoding of the input. | Improve this Doc View Source Encode(String, LanguageSet) Encodes an input string into an output phonetic representation, given a set of possible origin languages. Declaration public virtual string Encode(string input, LanguageSet languageSet) Parameters Type Name Description System.String input String to phoneticise; a string with dashes or spaces separating each word. LanguageSet languageSet Returns Type Description System.String A phonetic representation of the input; a string containing '-'-separated phonetic representations of the input."
  },
  "Lucene.Net.Analysis.Phonetic.Language.Bm.Rule.html": {
    "href": "Lucene.Net.Analysis.Phonetic.Language.Bm.Rule.html",
    "title": "Class Rule | Apache Lucene.NET 4.8.0-beta00009 Documentation",
    "keywords": "Class Rule A phoneme rule. Inheritance System.Object Rule Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Analysis.Phonetic.Language.Bm Assembly : Lucene.Net.Analysis.Phonetic.dll Syntax public class Rule Remarks Rules have a pattern, left context, right context, output phoneme, set of languages for which they apply and a logical flag indicating if all languages must be in play. A rule matches if: the pattern matches at the current position the string up until the beginning of the pattern matches the left context the string from the end of the pattern matches the right context logical is ALL and all languages are in scope; or logical is any other value and at least one language is in scope Rules are typically generated by parsing rules resources. In normal use, there will be no need for the user to explicitly construct their own. Rules are immutable and thread-safe. Rules resources Rules are typically loaded from resource files. These are UTF-8 encoded text files. They are systematically named following the pattern: Lucene.Net.Analysis.Phonetic.Language.Bm. NameType RuleType [language].txt The format of these resources is the following: Rules: whitespace separated, double-quoted strings. There should be 4 columns to each row, and these will be interpreted as: pattern left context right context phoneme End-of-line comments: Any occurrence of '//' will cause all text following on that line to be discarded as a comment. Multi-line comments: Any line starting with '/ ' will start multi-line commenting mode. This will skip all content until a line ending in ' ' and '/' is found. Blank lines: All blank lines will be skipped. since 1.6 Constructors | Improve this Doc View Source Rule(String, String, String, IPhonemeExpr) Creates a new rule. Declaration public Rule(string pattern, string lContext, string rContext, IPhonemeExpr phoneme) Parameters Type Name Description System.String pattern The pattern. System.String lContext The left context. System.String rContext The right context. IPhonemeExpr phoneme The resulting phoneme. Fields | Improve this Doc View Source ALL Declaration public const string ALL = \"ALL\" Field Value Type Description System.String | Improve this Doc View Source ALL_STRINGS_RMATCHER Declaration public static readonly IRPattern ALL_STRINGS_RMATCHER Field Value Type Description IRPattern Properties | Improve this Doc View Source LContext Gets the left context pattern. This is a regular expression that must match to the left of the pattern. Declaration public virtual IRPattern LContext { get; } Property Value Type Description IRPattern | Improve this Doc View Source Pattern Gets the pattern. This is a string-literal that must exactly match. Declaration public virtual string Pattern { get; } Property Value Type Description System.String | Improve this Doc View Source Phoneme Gets the phoneme. If the rule matches, this is the phoneme associated with the pattern match. Declaration public virtual IPhonemeExpr Phoneme { get; } Property Value Type Description IPhonemeExpr | Improve this Doc View Source RContext Gets the right context pattern. This is a regular expression that must match to the right of the pattern. Declaration public virtual IRPattern RContext { get; } Property Value Type Description IRPattern Methods | Improve this Doc View Source GetInstance(NameType, RuleType, LanguageSet) Gets rules for a combination of name type, rule type and languages. Declaration public static IList<Rule> GetInstance(NameType nameType, RuleType rt, LanguageSet langs) Parameters Type Name Description NameType nameType The NameType to consider. RuleType rt The RuleType to consider. LanguageSet langs The set of languages to consider. Returns Type Description System.Collections.Generic.IList < Rule > A list of Rule s that apply. | Improve this Doc View Source GetInstance(NameType, RuleType, String) Gets rules for a combination of name type, rule type and a single language. Declaration public static IList<Rule> GetInstance(NameType nameType, RuleType rt, string lang) Parameters Type Name Description NameType nameType The NameType to consider. RuleType rt The RuleType to consider. System.String lang The language to consider. Returns Type Description System.Collections.Generic.IList < Rule > A list of Rule s that apply. | Improve this Doc View Source GetInstanceMap(NameType, RuleType, LanguageSet) Gets rules for a combination of name type, rule type and languages. since 1.9 Declaration public static IDictionary<string, IList<Rule>> GetInstanceMap(NameType nameType, RuleType rt, LanguageSet langs) Parameters Type Name Description NameType nameType The NameType to consider. RuleType rt The RuleType to consider. LanguageSet langs The set of languages to consider. Returns Type Description System.Collections.Generic.IDictionary < System.String , System.Collections.Generic.IList < Rule >> A map containing all Rule s that apply, grouped by the first character of the rule pattern. | Improve this Doc View Source GetInstanceMap(NameType, RuleType, String) Gets rules for a combination of name type, rule type and a single language. since 1.9 Declaration public static IDictionary<string, IList<Rule>> GetInstanceMap(NameType nameType, RuleType rt, string lang) Parameters Type Name Description NameType nameType The NameType to consider. RuleType rt The RuleType to consider. System.String lang The language to consider. Returns Type Description System.Collections.Generic.IDictionary < System.String , System.Collections.Generic.IList < Rule >> A map containing all Rule s that apply, grouped by the first character of the rule pattern. | Improve this Doc View Source PatternAndContextMatches(ICharSequence, Int32) Decides if the pattern and context match the input starting at a position. It is a match if the LContext matches input up to i , Pattern matches at i and RContext matches from the end of the match of Pattern to the end of input . Declaration public virtual bool PatternAndContextMatches(ICharSequence input, int i) Parameters Type Name Description J2N.Text.ICharSequence input The input J2N.Text.ICharSequence . System.Int32 i The int position within the input. Returns Type Description System.Boolean true if the pattern and left/right context match, false otherwise. | Improve this Doc View Source PatternAndContextMatches(String, Int32) Decides if the pattern and context match the input starting at a position. It is a match if the LContext matches input up to i , Pattern matches at i and RContext matches from the end of the match of Pattern to the end of input . Declaration public virtual bool PatternAndContextMatches(string input, int i) Parameters Type Name Description System.String input The input System.String . System.Int32 i The int position within the input. Returns Type Description System.Boolean true if the pattern and left/right context match, false otherwise. | Improve this Doc View Source PatternAndContextMatches(StringBuilder, Int32) Decides if the pattern and context match the input starting at a position. It is a match if the LContext matches input up to i , Pattern matches at i and RContext matches from the end of the match of Pattern to the end of input . Declaration public virtual bool PatternAndContextMatches(StringBuilder input, int i) Parameters Type Name Description System.Text.StringBuilder input The input System.Text.StringBuilder . System.Int32 i The int position within the input. Returns Type Description System.Boolean true if the pattern and left/right context match, false otherwise."
  },
  "Lucene.Net.Analysis.Phonetic.Language.Bm.RuleType.html": {
    "href": "Lucene.Net.Analysis.Phonetic.Language.Bm.RuleType.html",
    "title": "Enum RuleType | Apache Lucene.NET 4.8.0-beta00009 Documentation",
    "keywords": "Enum RuleType Types of rule. since 1.6 Namespace : Lucene.Net.Analysis.Phonetic.Language.Bm Assembly : Lucene.Net.Analysis.Phonetic.dll Syntax public enum RuleType Fields Name Description APPROX Approximate rules, which will lead to the largest number of phonetic interpretations. EXACT Exact rules, which will lead to a minimum number of phonetic interpretations. RULES For internal use only. Please use APPROX or EXACT . Extension Methods RuleTypeExtensions.GetName()"
  },
  "Lucene.Net.Analysis.Phonetic.Language.Bm.RuleTypeExtensions.html": {
    "href": "Lucene.Net.Analysis.Phonetic.Language.Bm.RuleTypeExtensions.html",
    "title": "Class RuleTypeExtensions | Apache Lucene.NET 4.8.0-beta00009 Documentation",
    "keywords": "Class RuleTypeExtensions Inheritance System.Object RuleTypeExtensions Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Analysis.Phonetic.Language.Bm Assembly : Lucene.Net.Analysis.Phonetic.dll Syntax public static class RuleTypeExtensions Methods | Improve this Doc View Source GetName(RuleType) Gets the rule name. Declaration public static string GetName(this RuleType ruleType) Parameters Type Name Description RuleType ruleType The RuleType . Returns Type Description System.String The rule name."
  },
  "Lucene.Net.Analysis.Phonetic.Language.Bm.SomeLanguages.html": {
    "href": "Lucene.Net.Analysis.Phonetic.Language.Bm.SomeLanguages.html",
    "title": "Class SomeLanguages | Apache Lucene.NET 4.8.0-beta00009 Documentation",
    "keywords": "Class SomeLanguages Some languages, explicitly enumerated. Inheritance System.Object LanguageSet SomeLanguages Inherited Members LanguageSet.From(ISet<String>) System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Analysis.Phonetic.Language.Bm Assembly : Lucene.Net.Analysis.Phonetic.dll Syntax public sealed class SomeLanguages : LanguageSet Properties | Improve this Doc View Source IsEmpty Declaration public override bool IsEmpty { get; } Property Value Type Description System.Boolean Overrides LanguageSet.IsEmpty | Improve this Doc View Source IsSingleton Declaration public override bool IsSingleton { get; } Property Value Type Description System.Boolean Overrides LanguageSet.IsSingleton Methods | Improve this Doc View Source Contains(String) Declaration public override bool Contains(string language) Parameters Type Name Description System.String language Returns Type Description System.Boolean Overrides LanguageSet.Contains(String) | Improve this Doc View Source GetAny() Declaration public override string GetAny() Returns Type Description System.String Overrides LanguageSet.GetAny() | Improve this Doc View Source GetLanguages() Declaration public ISet<string> GetLanguages() Returns Type Description System.Collections.Generic.ISet < System.String > | Improve this Doc View Source RestrictTo(LanguageSet) Declaration public override LanguageSet RestrictTo(LanguageSet other) Parameters Type Name Description LanguageSet other Returns Type Description LanguageSet Overrides LanguageSet.RestrictTo(LanguageSet) | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String Overrides System.Object.ToString()"
  },
  "Lucene.Net.Analysis.Phonetic.Language.Caverphone1.html": {
    "href": "Lucene.Net.Analysis.Phonetic.Language.Caverphone1.html",
    "title": "Class Caverphone1 | Apache Lucene.NET 4.8.0-beta00009 Documentation",
    "keywords": "Class Caverphone1 Encodes a string into a Caverphone 1.0 value. This is an algorithm created by the Caversham Project at the University of Otago. It implements the Caverphone 1.0 algorithm: See: Wikipedia - Caverphone See: Caverphone 1.0 specification This class is immutable and thread-safe. since 1.5 Inheritance System.Object AbstractCaverphone Caverphone1 Implements IStringEncoder Inherited Members AbstractCaverphone.IsEncodeEqual(String, String) System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Analysis.Phonetic.Language Assembly : Lucene.Net.Analysis.Phonetic.dll Syntax public class Caverphone1 : AbstractCaverphone, IStringEncoder Methods | Improve this Doc View Source Encode(String) Encodes the given string into a Caverphone value. Declaration public override string Encode(string source) Parameters Type Name Description System.String source The source string. Returns Type Description System.String A caverphone code for the given string. Overrides AbstractCaverphone.Encode(String) Implements IStringEncoder"
  },
  "Lucene.Net.Analysis.Phonetic.Language.Caverphone2.html": {
    "href": "Lucene.Net.Analysis.Phonetic.Language.Caverphone2.html",
    "title": "Class Caverphone2 | Apache Lucene.NET 4.8.0-beta00009 Documentation",
    "keywords": "Class Caverphone2 Encodes a string into a Caverphone 2.0 value. This is an algorithm created by the Caversham Project at the University of Otago. It implements the Caverphone 2.0 algorithm: See: Wikipedia - Caverphone See: Caverphone 2.0 specification This class is immutable and thread-safe. Inheritance System.Object AbstractCaverphone Caverphone2 Implements IStringEncoder Inherited Members AbstractCaverphone.IsEncodeEqual(String, String) System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Analysis.Phonetic.Language Assembly : Lucene.Net.Analysis.Phonetic.dll Syntax public class Caverphone2 : AbstractCaverphone, IStringEncoder Methods | Improve this Doc View Source Encode(String) Encodes the given string into a Caverphone 2.0 value. Declaration public override string Encode(string source) Parameters Type Name Description System.String source The source string. Returns Type Description System.String A caverphone code for the given string. Overrides AbstractCaverphone.Encode(String) Implements IStringEncoder"
  },
  "Lucene.Net.Analysis.Phonetic.Language.ColognePhonetic.html": {
    "href": "Lucene.Net.Analysis.Phonetic.Language.ColognePhonetic.html",
    "title": "Class ColognePhonetic | Apache Lucene.NET 4.8.0-beta00009 Documentation",
    "keywords": "Class ColognePhonetic Encodes a string into a Cologne Phonetic value. Inheritance System.Object ColognePhonetic Implements IStringEncoder Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Analysis.Phonetic.Language Assembly : Lucene.Net.Analysis.Phonetic.dll Syntax public class ColognePhonetic : IStringEncoder Remarks Implements the KÖlner Phonetik (Cologne Phonetic) algorithm issued by Hans Joachim Postel in 1969. The KÖlner Phonetik is a phonetic algorithm which is optimized for the German language. It is related to the well-known soundex algorithm. Algorithm Step 1: After preprocessing (conversion to upper case, transcription of germanic umlauts , removal of non alphabetical characters) the letters of the supplied text are replaced by their phonetic code according to the following table. LetterContextCode A, E, I, J, O, U, Y0 H- B1 Pnot before H1 D, Tnot before C, S, Z2 F, V, W3 Pbefore H3 G, K, Q4 Ct onset before A, H, K, L, O, Q, R, U, X OR before A, H, K, O, Q, U, X except after S, Z4 Xnot after C, K, Q48 L5 M, N6 R7 S, Z8 Cafter S, Z OR at onset except before A, H, K, L, O, Q, R, U, X OR not before A, H, K, O, Q, U, X 8 D, Tbefore C, S, Z8 Xafter C, K, Q8 (Source: Wikipedia (de): KÖlner Phonetik -- Buchstabencodes ) Example: \"MÜller-LÜdenscheidt\" => \"MULLERLUDENSCHEIDT\" => \"6005507500206880022\" Step 2: Collapse of all multiple consecutive code digits. Example: \"6005507500206880022\" => \"6050750206802\" Step 3: Removal of all codes \"0\" except at the beginning. This means that two or more identical consecutive digits can occur if they occur after removing the \"0\" digits. Example: \"6050750206802\" => \"65752682\" This class is thread-safe. See: Wikipedia (de): Kölner Phonetik (in German) since 1.5 Methods | Improve this Doc View Source Encode(String) Declaration public virtual string Encode(string text) Parameters Type Name Description System.String text Returns Type Description System.String | Improve this Doc View Source GetColognePhonetic(String) Implements the Kölner Phonetik algorithm. In contrast to the initial description of the algorithm, this implementation does the encoding in one pass. Declaration public virtual string GetColognePhonetic(string text) Parameters Type Name Description System.String text Returns Type Description System.String The corresponding encoding according to the Kölner Phonetik algorithm | Improve this Doc View Source IsEncodeEqual(String, String) Declaration public virtual bool IsEncodeEqual(string text1, string text2) Parameters Type Name Description System.String text1 System.String text2 Returns Type Description System.Boolean Implements IStringEncoder"
  },
  "Lucene.Net.Analysis.Phonetic.Language.DaitchMokotoffSoundex.html": {
    "href": "Lucene.Net.Analysis.Phonetic.Language.DaitchMokotoffSoundex.html",
    "title": "Class DaitchMokotoffSoundex | Apache Lucene.NET 4.8.0-beta00009 Documentation",
    "keywords": "Class DaitchMokotoffSoundex Encodes a string into a Daitch-Mokotoff Soundex value. Inheritance System.Object DaitchMokotoffSoundex Implements IStringEncoder Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Analysis.Phonetic.Language Assembly : Lucene.Net.Analysis.Phonetic.dll Syntax public class DaitchMokotoffSoundex : IStringEncoder Remarks The Daitch-Mokotoff Soundex algorithm is a refinement of the Russel and American Soundex algorithms, yielding greater accuracy in matching especially Slavish and Yiddish surnames with similar pronunciation but differences in spelling. The main differences compared to the other soundex variants are: coded names are 6 digits long the initial character of the name is coded rules to encoded multi-character n-grams multiple possible encodings for the same name (branching) This implementation supports branching, depending on the used method: Encode(String) branching disabled, only the first code will be returned GetSoundex(String) branching enabled, all codes will be returned, separated by '|' Note: this implementation has additional branching rules compared to the original description of the algorithm. The rules can be customized by overriding the default rules contained in the resource file Lucene.Net.Analysis.Phonetic.Language.dmrules.txt . This class is thread-safe. See: Wikipedia - Daitch-Mokotoff Soundex See: Avotaynu - Soundexing and Genealogy since 1.10 Constructors | Improve this Doc View Source DaitchMokotoffSoundex() Creates a new instance with ASCII-folding enabled. Declaration public DaitchMokotoffSoundex() | Improve this Doc View Source DaitchMokotoffSoundex(Boolean) Creates a new instance. With ASCII-folding enabled, certain accented characters will be transformed to equivalent ASCII characters, e.g. è -> e. Declaration public DaitchMokotoffSoundex(bool folding) Parameters Type Name Description System.Boolean folding If ASCII-folding shall be performed before encoding. Methods | Improve this Doc View Source Encode(String) Encodes a string using the Daitch-Mokotoff soundex algorithm without branching. Declaration public virtual string Encode(string source) Parameters Type Name Description System.String source A string to encode. Returns Type Description System.String A DM Soundex code corresponding to the string supplied. Exceptions Type Condition System.ArgumentException If a character is not mapped. See Also GetSoundex(String) | Improve this Doc View Source GetSoundex(String) Encodes a string using the Daitch-Mokotoff soundex algorithm with branching. In case a string is encoded into multiple codes (see branching rules), the result will contain all codes, separated by '|'. Example: the name \"AUERBACH\" is encoded as both 097400 097500 Thus the result will be \"097400|097500\". Declaration public virtual string GetSoundex(string source) Parameters Type Name Description System.String source A string to encode. Returns Type Description System.String A string containing a set of DM Soundex codes corresponding to the string supplied. Exceptions Type Condition System.ArgumentException If a character is not mapped. Implements IStringEncoder See Also Soundex"
  },
  "Lucene.Net.Analysis.Phonetic.Language.DoubleMetaphone.DoubleMetaphoneResult.html": {
    "href": "Lucene.Net.Analysis.Phonetic.Language.DoubleMetaphone.DoubleMetaphoneResult.html",
    "title": "Class DoubleMetaphone.DoubleMetaphoneResult | Apache Lucene.NET 4.8.0-beta00009 Documentation",
    "keywords": "Class DoubleMetaphone.DoubleMetaphoneResult Inner class for storing results, since there is the optional alternate encoding. Inheritance System.Object DoubleMetaphone.DoubleMetaphoneResult Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Analysis.Phonetic.Language Assembly : Lucene.Net.Analysis.Phonetic.dll Syntax public class DoubleMetaphoneResult Constructors | Improve this Doc View Source DoubleMetaphoneResult(Int32) Declaration public DoubleMetaphoneResult(int maxLength) Parameters Type Name Description System.Int32 maxLength Properties | Improve this Doc View Source Alternate Declaration public virtual string Alternate { get; } Property Value Type Description System.String | Improve this Doc View Source IsComplete Declaration public virtual bool IsComplete { get; } Property Value Type Description System.Boolean | Improve this Doc View Source Primary Declaration public virtual string Primary { get; } Property Value Type Description System.String Methods | Improve this Doc View Source Append(Char) Declaration public virtual void Append(char value) Parameters Type Name Description System.Char value | Improve this Doc View Source Append(Char, Char) Declaration public virtual void Append(char primary, char alternate) Parameters Type Name Description System.Char primary System.Char alternate | Improve this Doc View Source Append(String) Declaration public virtual void Append(string value) Parameters Type Name Description System.String value | Improve this Doc View Source Append(String, String) Declaration public virtual void Append(string primary, string alternate) Parameters Type Name Description System.String primary System.String alternate | Improve this Doc View Source AppendAlternate(Char) Declaration public virtual void AppendAlternate(char value) Parameters Type Name Description System.Char value | Improve this Doc View Source AppendAlternate(String) Declaration public virtual void AppendAlternate(string value) Parameters Type Name Description System.String value | Improve this Doc View Source AppendPrimary(Char) Declaration public virtual void AppendPrimary(char value) Parameters Type Name Description System.Char value | Improve this Doc View Source AppendPrimary(String) Declaration public virtual void AppendPrimary(string value) Parameters Type Name Description System.String value"
  },
  "Lucene.Net.Analysis.Phonetic.Language.DoubleMetaphone.html": {
    "href": "Lucene.Net.Analysis.Phonetic.Language.DoubleMetaphone.html",
    "title": "Class DoubleMetaphone | Apache Lucene.NET 4.8.0-beta00009 Documentation",
    "keywords": "Class DoubleMetaphone Encodes a string into a double metaphone value. This Implementation is based on the algorithm by Lawrence Philips . This class is conditionally thread-safe. The instance field Lucene.Net.Analysis.Phonetic.Language.DoubleMetaphone.maxCodeLen is mutable MaxCodeLen but is not volatile, and accesses are not synchronized. If an instance of the class is shared between threads, the caller needs to ensure that suitable synchronization is used to ensure safe publication of the value between threads, and must not set MaxCodeLen after initial setup. See Original Article See http://en.wikipedia.org/wiki/Metaphone Inheritance System.Object DoubleMetaphone Implements IStringEncoder Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Analysis.Phonetic.Language Assembly : Lucene.Net.Analysis.Phonetic.dll Syntax public class DoubleMetaphone : IStringEncoder Constructors | Improve this Doc View Source DoubleMetaphone() Creates an instance of this DoubleMetaphone encoder Declaration public DoubleMetaphone() Properties | Improve this Doc View Source MaxCodeLen Gets or Sets the maxCodeLen. Declaration public virtual int MaxCodeLen { get; set; } Property Value Type Description System.Int32 Methods | Improve this Doc View Source CharAt(String, Int32) Gets the character at index index if available, otherwise it returns System.Char.MinValue so that there is some sort of a default. Declaration protected virtual char CharAt(string value, int index) Parameters Type Name Description System.String value System.Int32 index Returns Type Description System.Char | Improve this Doc View Source Contains(String, Int32, Int32, String[]) Determines whether value contains any of the criteria starting at index start and matching up to length length . Declaration protected static bool Contains(string value, int start, int length, params string[] criteria) Parameters Type Name Description System.String value System.Int32 start System.Int32 length System.String [] criteria Returns Type Description System.Boolean | Improve this Doc View Source Encode(String) Encode the value using DoubleMetaphone. Declaration public virtual string Encode(string value) Parameters Type Name Description System.String value String to encode. Returns Type Description System.String An encoded string. | Improve this Doc View Source GetDoubleMetaphone(String) Encode a value with Double Metaphone. Declaration public virtual string GetDoubleMetaphone(string value) Parameters Type Name Description System.String value String to encode. Returns Type Description System.String An encoded string. | Improve this Doc View Source GetDoubleMetaphone(String, Boolean) Encode a value with Double Metaphone, optionally using the alternate encoding. Declaration public virtual string GetDoubleMetaphone(string value, bool alternate) Parameters Type Name Description System.String value String to encode. System.Boolean alternate Use alternate encode. Returns Type Description System.String An encoded string. | Improve this Doc View Source IsDoubleMetaphoneEqual(String, String) Check if the Double Metaphone values of two System.String values are equal. Declaration public virtual bool IsDoubleMetaphoneEqual(string value1, string value2) Parameters Type Name Description System.String value1 The left-hand side of the encoded System.String.Equals(System.Object) . System.String value2 The right-hand side of the encoded System.String.Equals(System.Object) . Returns Type Description System.Boolean true if the encoded System.String s are equal; false otherwise. | Improve this Doc View Source IsDoubleMetaphoneEqual(String, String, Boolean) Check if the Double Metaphone values of two System.String values are equal, optionally using the alternate value. Declaration public virtual bool IsDoubleMetaphoneEqual(string value1, string value2, bool alternate) Parameters Type Name Description System.String value1 The left-hand side of the encoded System.String.Equals(System.Object) . System.String value2 The right-hand side of the encoded System.String.Equals(System.Object) . System.Boolean alternate Use the alternate value if true . Returns Type Description System.Boolean true if the encoded System.String s are equal; false otherwise. Implements IStringEncoder"
  },
  "Lucene.Net.Analysis.Phonetic.Language.html": {
    "href": "Lucene.Net.Analysis.Phonetic.Language.html",
    "title": "Namespace Lucene.Net.Analysis.Phonetic.Language | Apache Lucene.NET 4.8.0-beta00009 Documentation",
    "keywords": "Namespace Lucene.Net.Analysis.Phonetic.Language Classes AbstractCaverphone Encodes a string into a Caverphone value. This is an algorithm created by the Caversham Project at the University of Otago. It implements the Caverphone 2.0 algorithm: This class is immutable and thread-safe. See Wikipedia - Caverphone Caverphone1 Encodes a string into a Caverphone 1.0 value. This is an algorithm created by the Caversham Project at the University of Otago. It implements the Caverphone 1.0 algorithm: See: Wikipedia - Caverphone See: Caverphone 1.0 specification This class is immutable and thread-safe. since 1.5 Caverphone2 Encodes a string into a Caverphone 2.0 value. This is an algorithm created by the Caversham Project at the University of Otago. It implements the Caverphone 2.0 algorithm: See: Wikipedia - Caverphone See: Caverphone 2.0 specification This class is immutable and thread-safe. ColognePhonetic Encodes a string into a Cologne Phonetic value. DaitchMokotoffSoundex Encodes a string into a Daitch-Mokotoff Soundex value. DoubleMetaphone Encodes a string into a double metaphone value. This Implementation is based on the algorithm by Lawrence Philips . This class is conditionally thread-safe. The instance field Lucene.Net.Analysis.Phonetic.Language.DoubleMetaphone.maxCodeLen is mutable MaxCodeLen but is not volatile, and accesses are not synchronized. If an instance of the class is shared between threads, the caller needs to ensure that suitable synchronization is used to ensure safe publication of the value between threads, and must not set MaxCodeLen after initial setup. See Original Article See http://en.wikipedia.org/wiki/Metaphone DoubleMetaphone.DoubleMetaphoneResult Inner class for storing results, since there is the optional alternate encoding. MatchRatingApproachEncoder Match Rating Approach Phonetic Algorithm Developed by Western Airlines in 1977. This class is immutable and thread-safe. See: Wikipedia - Match Rating Approach since 1.8 Metaphone Encodes a string into a Metaphone value. Initial Java implementation by William B. Brogden. December, 1997 . Permission given by wbrogden for code to be used anywhere. Hanging on the Metaphone by Lawrence Philips in Computer Language of Dec. 1990, p 39. Note, that this does not match the algorithm that ships with PHP, or the algorithm found in the Perl implementations: Text:Metaphone-1.96 (broken link 4/30/2013) Text:Metaphone-1.96 (link checked 4/30/2013) They have had undocumented changes from the originally published algorithm. For more information, see CODEC-57 . This class is conditionally thread-safe. The instance field Lucene.Net.Analysis.Phonetic.Language.Metaphone.maxCodeLen is mutable MaxCodeLen but is not volatile, and accesses are not synchronized. If an instance of the class is shared between threads, the caller needs to ensure that suitable synchronization is used to ensure safe publication of the value between threads, and must not set MaxCodeLen after initial setup. Nysiis Encodes a string into a NYSIIS value. NYSIIS is an encoding used to relate similar names, but can also be used as a general purpose scheme to find word with similar phonemes. RefinedSoundex Encodes a string into a Refined Soundex value. A refined soundex code is optimized for spell checking words. Soundex method originally developed by Margaret Odell and Robert Russell . This class is immutable and thread-safe. Soundex Encodes a string into a Soundex value. Soundex is an encoding used to relate similar names, but can also be used as a general purpose scheme to find word with similar phonemes. This class is thread-safe. Although not strictly immutable, the Lucene.Net.Analysis.Phonetic.Language.Soundex.maxLength field is not actually used. Interfaces IStringEncoder Defines common encoding methods for System.String encoders."
  },
  "Lucene.Net.Analysis.Phonetic.Language.IStringEncoder.html": {
    "href": "Lucene.Net.Analysis.Phonetic.Language.IStringEncoder.html",
    "title": "Interface IStringEncoder | Apache Lucene.NET 4.8.0-beta00009 Documentation",
    "keywords": "Interface IStringEncoder Defines common encoding methods for System.String encoders. Namespace : Lucene.Net.Analysis.Phonetic.Language Assembly : Lucene.Net.Analysis.Phonetic.dll Syntax public interface IStringEncoder Methods | Improve this Doc View Source Encode(String) Encodes a System.String and returns a System.String . Declaration string Encode(string source) Parameters Type Name Description System.String source the System.String to encode Returns Type Description System.String the encoded System.String"
  },
  "Lucene.Net.Analysis.Phonetic.Language.MatchRatingApproachEncoder.html": {
    "href": "Lucene.Net.Analysis.Phonetic.Language.MatchRatingApproachEncoder.html",
    "title": "Class MatchRatingApproachEncoder | Apache Lucene.NET 4.8.0-beta00009 Documentation",
    "keywords": "Class MatchRatingApproachEncoder Match Rating Approach Phonetic Algorithm Developed by Western Airlines in 1977. This class is immutable and thread-safe. See: Wikipedia - Match Rating Approach since 1.8 Inheritance System.Object MatchRatingApproachEncoder Implements IStringEncoder Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Analysis.Phonetic.Language Assembly : Lucene.Net.Analysis.Phonetic.dll Syntax public class MatchRatingApproachEncoder : IStringEncoder Methods | Improve this Doc View Source Encode(String) Encodes a string using the Match Rating Approach (MRA) algorithm. Declaration public string Encode(string name) Parameters Type Name Description System.String name String to encode. Returns Type Description System.String The MRA code corresponding to the string supplied. | Improve this Doc View Source IsEncodeEquals(String, String) Determines if two names are homophonous via Match Rating Approach (MRA) algorithm. It should be noted that the strings are cleaned in the same way as Encode(String) . Declaration public virtual bool IsEncodeEquals(string name1, string name2) Parameters Type Name Description System.String name1 First of the 2 strings (names) to compare. System.String name2 Second of the 2 names to compare. Returns Type Description System.Boolean true if the encodings are identical false otherwise. Implements IStringEncoder"
  },
  "Lucene.Net.Analysis.Phonetic.Language.Metaphone.html": {
    "href": "Lucene.Net.Analysis.Phonetic.Language.Metaphone.html",
    "title": "Class Metaphone | Apache Lucene.NET 4.8.0-beta00009 Documentation",
    "keywords": "Class Metaphone Encodes a string into a Metaphone value. Initial Java implementation by William B. Brogden. December, 1997 . Permission given by wbrogden for code to be used anywhere. Hanging on the Metaphone by Lawrence Philips in Computer Language of Dec. 1990, p 39. Note, that this does not match the algorithm that ships with PHP, or the algorithm found in the Perl implementations: Text:Metaphone-1.96 (broken link 4/30/2013) Text:Metaphone-1.96 (link checked 4/30/2013) They have had undocumented changes from the originally published algorithm. For more information, see CODEC-57 . This class is conditionally thread-safe. The instance field Lucene.Net.Analysis.Phonetic.Language.Metaphone.maxCodeLen is mutable MaxCodeLen but is not volatile, and accesses are not synchronized. If an instance of the class is shared between threads, the caller needs to ensure that suitable synchronization is used to ensure safe publication of the value between threads, and must not set MaxCodeLen after initial setup. Inheritance System.Object Metaphone Implements IStringEncoder Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Analysis.Phonetic.Language Assembly : Lucene.Net.Analysis.Phonetic.dll Syntax public class Metaphone : IStringEncoder Constructors | Improve this Doc View Source Metaphone() Creates an instance of the Metaphone encoder Declaration public Metaphone() Properties | Improve this Doc View Source MaxCodeLen Gets or Sets Lucene.Net.Analysis.Phonetic.Language.Metaphone.maxCodeLen . Declaration public virtual int MaxCodeLen { get; set; } Property Value Type Description System.Int32 Methods | Improve this Doc View Source Encode(String) Encodes a string using the Metaphone algorithm. Declaration public virtual string Encode(string str) Parameters Type Name Description System.String str String to encode. Returns Type Description System.String The metaphone code corresponding to the string supplied. | Improve this Doc View Source GetMetaphone(String) Find the metaphone value of a string. This is similar to the soundex algorithm, but better at finding similar sounding words. All input is converted to upper case. Limitations: Input format is expected to be a single ASCII word with only characters in the A - Z range, no punctuation or numbers. Declaration public virtual string GetMetaphone(string txt) Parameters Type Name Description System.String txt String to find the metaphone code for. Returns Type Description System.String A metaphone code corresponding to the string supplied. | Improve this Doc View Source IsMetaphoneEqual(String, String) Tests is the metaphones of two strings are identical. Declaration public virtual bool IsMetaphoneEqual(string str1, string str2) Parameters Type Name Description System.String str1 First of two strings to compare. System.String str2 Second of two strings to compare. Returns Type Description System.Boolean true if the metaphones of these strings are identical, false otherwise. Implements IStringEncoder"
  },
  "Lucene.Net.Analysis.Phonetic.Language.Nysiis.html": {
    "href": "Lucene.Net.Analysis.Phonetic.Language.Nysiis.html",
    "title": "Class Nysiis | Apache Lucene.NET 4.8.0-beta00009 Documentation",
    "keywords": "Class Nysiis Encodes a string into a NYSIIS value. NYSIIS is an encoding used to relate similar names, but can also be used as a general purpose scheme to find word with similar phonemes. Inheritance System.Object Nysiis Implements IStringEncoder Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Analysis.Phonetic.Language Assembly : Lucene.Net.Analysis.Phonetic.dll Syntax public class Nysiis : IStringEncoder Remarks NYSIIS features an accuracy increase of 2.7% over the traditional Soundex algorithm. Algorithm description: Transcode first characters of name MAC -> MCC KN -> NN K -> C PH -> FF PF -> FF SCH -> SSS Transcode last characters of name EE, IE -> Y DT,RT,RD,NT,ND -> D First character of key = first character of name Transcode remaining characters by following these rules, incrementing by one character each time EV -> AF else A,E,I,O,U -> A Q -> G Z -> S M -> N KN -> N else K -> C SCH -> SSS PH -> FF H -> If previous or next is nonvowel, previous W -> If previous is vowel, previous Add current to key if current != last key character If last character is S, remove it If last characters are AY, replace with Y If last character is A, remove it Collapse all strings of repeated characters Add original first character of name as first character of key This class is immutable and thread-safe. See: NYSIIS on Wikipedia See: NYSIIS on dropby.com since 1.7 Constructors | Improve this Doc View Source Nysiis() Creates an instance of the Nysiis encoder with strict mode (original form), i.e. encoded strings have a maximum length of 6. Declaration public Nysiis() | Improve this Doc View Source Nysiis(Boolean) Create an instance of the Nysiis encoder with the specified strict mode: true :encoded strings have a maximum length of 6 false :encoded strings may have arbitrary length Declaration public Nysiis(bool strict) Parameters Type Name Description System.Boolean strict The strict mode. Properties | Improve this Doc View Source IsStrict Indicates the strict mode for this Nysiis encoder. true if the encoder is configured for strict mode, false otherwise. Declaration public virtual bool IsStrict { get; } Property Value Type Description System.Boolean Methods | Improve this Doc View Source Encode(String) Encodes a string using the NYSIIS algorithm. Declaration public virtual string Encode(string str) Parameters Type Name Description System.String str A string object to encode. Returns Type Description System.String A Nysiis code corresponding to the string supplied. Exceptions Type Condition System.ArgumentException If a character is not mapped. | Improve this Doc View Source GetNysiis(String) Retrieves the NYSIIS code for a given string. Declaration public virtual string GetNysiis(string str) Parameters Type Name Description System.String str String to encode using the NYSIIS algorithm. Returns Type Description System.String A NYSIIS code for the string supplied. Implements IStringEncoder See Also Soundex"
  },
  "Lucene.Net.Analysis.Phonetic.Language.RefinedSoundex.html": {
    "href": "Lucene.Net.Analysis.Phonetic.Language.RefinedSoundex.html",
    "title": "Class RefinedSoundex | Apache Lucene.NET 4.8.0-beta00009 Documentation",
    "keywords": "Class RefinedSoundex Encodes a string into a Refined Soundex value. A refined soundex code is optimized for spell checking words. Soundex method originally developed by Margaret Odell and Robert Russell . This class is immutable and thread-safe. Inheritance System.Object RefinedSoundex Implements IStringEncoder Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Analysis.Phonetic.Language Assembly : Lucene.Net.Analysis.Phonetic.dll Syntax public class RefinedSoundex : IStringEncoder Constructors | Improve this Doc View Source RefinedSoundex() Creates an instance of the RefinedSoundex object using the default US English mapping. Declaration public RefinedSoundex() | Improve this Doc View Source RefinedSoundex(Char[]) Creates a refined soundex instance using a custom mapping. This constructor can be used to customize the mapping, and/or possibly provide an internationalized mapping for a non-Western character set. Declaration public RefinedSoundex(char[] mapping) Parameters Type Name Description System.Char [] mapping Mapping array to use when finding the corresponding code for a given character. | Improve this Doc View Source RefinedSoundex(String) Creates a refined Soundex instance using a custom mapping. This constructor can be used to customize the mapping, and/or possibly provide an internationalized mapping for a non-Western character set. Declaration public RefinedSoundex(string mapping) Parameters Type Name Description System.String mapping Mapping string to use when finding the corresponding code for a given character. Fields | Improve this Doc View Source US_ENGLISH This static variable contains an instance of the RefinedSoundex using the US_ENGLISH mapping. Declaration public static readonly RefinedSoundex US_ENGLISH Field Value Type Description RefinedSoundex | Improve this Doc View Source US_ENGLISH_MAPPING_STRING since 1.4 Declaration public static readonly string US_ENGLISH_MAPPING_STRING Field Value Type Description System.String Methods | Improve this Doc View Source Difference(String, String) Returns the number of characters in the two encoded strings that are the same. This return value ranges from 0 to the length of the shortest encoded string: 0 indicates little or no similarity, and 4 out of 4 (for example) indicates strong similarity or identical values. For refined Soundex, the return value can be greater than 4. See: MS T-SQL DIFFERENCE since 1.3 Declaration public virtual int Difference(string s1, string s2) Parameters Type Name Description System.String s1 A string that will be encoded and compared. System.String s2 A string that will be encoded and compared. Returns Type Description System.Int32 The number of characters in the two encoded strings that are the same from 0 to to the length of the shortest encoded string. See Also Lucene.Net.Analysis.Phonetic.Language.SoundexUtils.Difference(Lucene.Net.Analysis.Phonetic.Language.IStringEncoder,System.String,System.String) | Improve this Doc View Source Encode(String) Encodes a string using the refined soundex algorithm. Declaration public virtual string Encode(string str) Parameters Type Name Description System.String str A string object to encode. Returns Type Description System.String A Soundex code corresponding to the string supplied. | Improve this Doc View Source GetSoundex(String) Retrieves the Refined Soundex code for a given string. Declaration public virtual string GetSoundex(string str) Parameters Type Name Description System.String str String to encode using the Refined Soundex algorithm. Returns Type Description System.String A soundex code for the string supplied. Implements IStringEncoder"
  },
  "Lucene.Net.Analysis.Phonetic.Language.Soundex.html": {
    "href": "Lucene.Net.Analysis.Phonetic.Language.Soundex.html",
    "title": "Class Soundex | Apache Lucene.NET 4.8.0-beta00009 Documentation",
    "keywords": "Class Soundex Encodes a string into a Soundex value. Soundex is an encoding used to relate similar names, but can also be used as a general purpose scheme to find word with similar phonemes. This class is thread-safe. Although not strictly immutable, the Lucene.Net.Analysis.Phonetic.Language.Soundex.maxLength field is not actually used. Inheritance System.Object Soundex Implements IStringEncoder Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Analysis.Phonetic.Language Assembly : Lucene.Net.Analysis.Phonetic.dll Syntax public class Soundex : IStringEncoder Constructors | Improve this Doc View Source Soundex() Creates an instance using Lucene.Net.Analysis.Phonetic.Language.Soundex.US_ENGLISH_MAPPING . Declaration public Soundex() See Also Soundex(Char[]) Lucene.Net.Analysis.Phonetic.Language.Soundex.US_ENGLISH_MAPPING | Improve this Doc View Source Soundex(Char[]) Creates a soundex instance using the given mapping. This constructor can be used to provide an internationalized mapping for a non-Western character set. Every letter of the alphabet is \"mapped\" to a numerical value. This char array holds the values to which each letter is mapped. This implementation contains a default map for US_ENGLISH . If the mapping contains an instance of SILENT_MARKER then H and W are not given special treatment. Declaration public Soundex(char[] mapping) Parameters Type Name Description System.Char [] mapping Mapping array to use when finding the corresponding code for a given character. | Improve this Doc View Source Soundex(String) Creates a refined soundex instance using a custom mapping. This constructor can be used to customize the mapping, and/or possibly provide an internationalized mapping for a non-Western character set. If the mapping contains an instance of SILENT_MARKER then H and W are not given special treatment. since 1.4 Declaration public Soundex(string mapping) Parameters Type Name Description System.String mapping Mapping string to use when finding the corresponding code for a given character. | Improve this Doc View Source Soundex(String, Boolean) Creates a refined soundex instance using a custom mapping. This constructor can be used to customize the mapping, and/or possibly provide an internationalized mapping for a non-Western character set. since 1.11 Declaration public Soundex(string mapping, bool specialCaseHW) Parameters Type Name Description System.String mapping Mapping string to use when finding the corresponding code for a given character. System.Boolean specialCaseHW if true, then Fields | Improve this Doc View Source SILENT_MARKER The marker character used to indicate a silent (ignored) character. These are ignored except when they appear as the first character. Note: the US_ENGLISH_MAPPING_STRING does not use this mechanism because changing it might break existing code. Mappings that don't contain a silent marker code are treated as though H and W are silent. To override this, use the Soundex(String, Boolean) constructor. since 1.11 Declaration public static readonly char SILENT_MARKER Field Value Type Description System.Char | Improve this Doc View Source US_ENGLISH An instance of Soundex using the US_ENGLISH_MAPPING mapping. This treats H and W as silent letters. Apart from when they appear as the first letter, they are ignored. They don't act as separators between duplicate codes. Declaration public static readonly Soundex US_ENGLISH Field Value Type Description Soundex See Also Lucene.Net.Analysis.Phonetic.Language.Soundex.US_ENGLISH_MAPPING US_ENGLISH_MAPPING_STRING | Improve this Doc View Source US_ENGLISH_GENEALOGY An instance of Soundex using the mapping as per the Genealogy site: http://www.genealogy.com/articles/research/00000060.html This treats vowels (AEIOUY), H and W as silent letters. Such letters are ignored (after the first) and do not act as separators when dropping duplicate codes. The codes for consonants are otherwise the same as for US_ENGLISH_MAPPING_STRING and US_ENGLISH_SIMPLIFIED . since 1.11 Declaration public static readonly Soundex US_ENGLISH_GENEALOGY Field Value Type Description Soundex | Improve this Doc View Source US_ENGLISH_MAPPING_STRING This is a default mapping of the 26 letters used in US English. A value of 0 for a letter position means do not encode, but treat as a separator when it occurs between consonants with the same code. (This constant is provided as both an implementation convenience and to allow documentation to pick up the value for the constant values page.) Note that letters H and W are treated specially. They are ignored (after the first letter) and don't act as separators between consonants with the same code. Declaration public static readonly string US_ENGLISH_MAPPING_STRING Field Value Type Description System.String See Also Lucene.Net.Analysis.Phonetic.Language.Soundex.US_ENGLISH_MAPPING | Improve this Doc View Source US_ENGLISH_SIMPLIFIED An instance of Soundex using the Simplified Soundex mapping, as described here: http://west-penwith.org.uk/misc/soundex.htm This treats H and W the same as vowels (AEIOUY). Such letters aren't encoded (after the first), but they do act as separators when dropping duplicate codes. The mapping is otherwise the same as for US_ENGLISH . since 1.11 Declaration public static readonly Soundex US_ENGLISH_SIMPLIFIED Field Value Type Description Soundex Properties | Improve this Doc View Source MaxLength Gets or Sets the maxLength. Standard Soundex Declaration [Obsolete(\"This feature is not needed since the encoding size must be constant. Will be removed in 2.0.\")] public virtual int MaxLength { get; set; } Property Value Type Description System.Int32 Methods | Improve this Doc View Source Difference(String, String) Encodes the strings and returns the number of characters in the two encoded strings that are the same. This return value ranges from 0 through 4: 0 indicates little or no similarity, and 4 indicates strong similarity or identical values. See: MS T-SQL DIFFERENCE since 1.3 Declaration public virtual int Difference(string s1, string s2) Parameters Type Name Description System.String s1 A string that will be encoded and compared. System.String s2 A string that will be encoded and compared. Returns Type Description System.Int32 The number of characters in the two encoded strings that are the same from 0 to 4. See Also Lucene.Net.Analysis.Phonetic.Language.SoundexUtils.Difference(Lucene.Net.Analysis.Phonetic.Language.IStringEncoder,System.String,System.String) | Improve this Doc View Source Encode(String) Encodes a string using the soundex algorithm. Declaration public virtual string Encode(string str) Parameters Type Name Description System.String str A string to encode. Returns Type Description System.String A Soundex code corresponding to the string supplied. Exceptions Type Condition System.ArgumentException If a character is not mapped. | Improve this Doc View Source GetSoundex(String) Retrieves the Soundex code for a given string. Declaration public virtual string GetSoundex(string str) Parameters Type Name Description System.String str String to encode using the Soundex algorithm. Returns Type Description System.String A soundex code for the string supplied. Exceptions Type Condition System.ArgumentException If a character is not mapped. Implements IStringEncoder"
  },
  "Lucene.Net.Analysis.Phonetic.PhoneticFilter.html": {
    "href": "Lucene.Net.Analysis.Phonetic.PhoneticFilter.html",
    "title": "Class PhoneticFilter | Apache Lucene.NET 4.8.0-beta00009 Documentation",
    "keywords": "Class PhoneticFilter Create tokens for phonetic matches. See the Language namespace. Inheritance System.Object Lucene.Net.Util.AttributeSource Lucene.Net.Analysis.TokenStream Lucene.Net.Analysis.TokenFilter PhoneticFilter Implements System.IDisposable Inherited Members Lucene.Net.Analysis.TokenFilter.m_input Lucene.Net.Analysis.TokenFilter.End() TokenFilter.Dispose(Boolean) Lucene.Net.Analysis.TokenStream.Dispose() Lucene.Net.Util.AttributeSource.GetAttributeFactory() Lucene.Net.Util.AttributeSource.GetAttributeClassesEnumerator() Lucene.Net.Util.AttributeSource.GetAttributeImplsEnumerator() Lucene.Net.Util.AttributeSource.AddAttributeImpl(Lucene.Net.Util.Attribute) Lucene.Net.Util.AttributeSource.AddAttribute<T>() Lucene.Net.Util.AttributeSource.HasAttributes Lucene.Net.Util.AttributeSource.HasAttribute<T>() Lucene.Net.Util.AttributeSource.GetAttribute<T>() Lucene.Net.Util.AttributeSource.ClearAttributes() Lucene.Net.Util.AttributeSource.CaptureState() Lucene.Net.Util.AttributeSource.RestoreState(Lucene.Net.Util.AttributeSource.State) Lucene.Net.Util.AttributeSource.GetHashCode() AttributeSource.Equals(Object) AttributeSource.ReflectAsString(Boolean) Lucene.Net.Util.AttributeSource.ReflectWith(Lucene.Net.Util.IAttributeReflector) Lucene.Net.Util.AttributeSource.CloneAttributes() Lucene.Net.Util.AttributeSource.CopyTo(Lucene.Net.Util.AttributeSource) Lucene.Net.Util.AttributeSource.ToString() System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Analysis.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 Lucene.Net.Analysis.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 Lucene.Net.Analysis.TokenStream.IncrementToken() | Improve this Doc View Source Reset() Declaration public override void Reset() Overrides Lucene.Net.Analysis.TokenFilter.Reset() Implements System.IDisposable"
  },
  "Lucene.Net.Analysis.Phonetic.PhoneticFilterFactory.html": {
    "href": "Lucene.Net.Analysis.Phonetic.PhoneticFilterFactory.html",
    "title": "Class PhoneticFilterFactory | Apache Lucene.NET 4.8.0-beta00009 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 Lucene.Net.Analysis.Util.AbstractAnalysisFactory Lucene.Net.Analysis.Util.TokenFilterFactory PhoneticFilterFactory Implements Lucene.Net.Analysis.Util.IResourceLoaderAware Inherited Members Lucene.Net.Analysis.Util.TokenFilterFactory.ForName(System.String, System.Collections.Generic.IDictionary<System.String, System.String>) Lucene.Net.Analysis.Util.TokenFilterFactory.LookupClass(System.String) Lucene.Net.Analysis.Util.TokenFilterFactory.AvailableTokenFilters Lucene.Net.Analysis.Util.TokenFilterFactory.ReloadTokenFilters() Lucene.Net.Analysis.Util.AbstractAnalysisFactory.LUCENE_MATCH_VERSION_PARAM Lucene.Net.Analysis.Util.AbstractAnalysisFactory.m_luceneMatchVersion Lucene.Net.Analysis.Util.AbstractAnalysisFactory.OriginalArgs Lucene.Net.Analysis.Util.AbstractAnalysisFactory.AssureMatchVersion() Lucene.Net.Analysis.Util.AbstractAnalysisFactory.LuceneMatchVersion Lucene.Net.Analysis.Util.AbstractAnalysisFactory.Require(System.Collections.Generic.IDictionary<System.String, System.String>, System.String) Lucene.Net.Analysis.Util.AbstractAnalysisFactory.Require(System.Collections.Generic.IDictionary<System.String, System.String>, System.String, System.Collections.Generic.ICollection<System.String>) Lucene.Net.Analysis.Util.AbstractAnalysisFactory.Require(System.Collections.Generic.IDictionary<System.String, System.String>, System.String, System.Collections.Generic.ICollection<System.String>, System.Boolean) Lucene.Net.Analysis.Util.AbstractAnalysisFactory.Get(System.Collections.Generic.IDictionary<System.String, System.String>, System.String, System.String) Lucene.Net.Analysis.Util.AbstractAnalysisFactory.Get(System.Collections.Generic.IDictionary<System.String, System.String>, System.String, System.Collections.Generic.ICollection<System.String>) Lucene.Net.Analysis.Util.AbstractAnalysisFactory.Get(System.Collections.Generic.IDictionary<System.String, System.String>, System.String, System.Collections.Generic.ICollection<System.String>, System.String) Lucene.Net.Analysis.Util.AbstractAnalysisFactory.Get(System.Collections.Generic.IDictionary<System.String, System.String>, System.String, System.Collections.Generic.ICollection<System.String>, System.String, System.Boolean) Lucene.Net.Analysis.Util.AbstractAnalysisFactory.RequireInt32(System.Collections.Generic.IDictionary<System.String, System.String>, System.String) Lucene.Net.Analysis.Util.AbstractAnalysisFactory.GetInt32(System.Collections.Generic.IDictionary<System.String, System.String>, System.String, System.Int32) Lucene.Net.Analysis.Util.AbstractAnalysisFactory.RequireBoolean(System.Collections.Generic.IDictionary<System.String, System.String>, System.String) Lucene.Net.Analysis.Util.AbstractAnalysisFactory.GetBoolean(System.Collections.Generic.IDictionary<System.String, System.String>, System.String, System.Boolean) Lucene.Net.Analysis.Util.AbstractAnalysisFactory.RequireSingle(System.Collections.Generic.IDictionary<System.String, System.String>, System.String) Lucene.Net.Analysis.Util.AbstractAnalysisFactory.GetSingle(System.Collections.Generic.IDictionary<System.String, System.String>, System.String, System.Single) Lucene.Net.Analysis.Util.AbstractAnalysisFactory.RequireChar(System.Collections.Generic.IDictionary<System.String, System.String>, System.String) Lucene.Net.Analysis.Util.AbstractAnalysisFactory.GetChar(System.Collections.Generic.IDictionary<System.String, System.String>, System.String, System.Char) Lucene.Net.Analysis.Util.AbstractAnalysisFactory.GetSet(System.Collections.Generic.IDictionary<System.String, System.String>, System.String) Lucene.Net.Analysis.Util.AbstractAnalysisFactory.GetPattern(System.Collections.Generic.IDictionary<System.String, System.String>, System.String) Lucene.Net.Analysis.Util.AbstractAnalysisFactory.GetCulture(System.Collections.Generic.IDictionary<System.String, System.String>, System.String, System.Globalization.CultureInfo) Lucene.Net.Analysis.Util.AbstractAnalysisFactory.GetWordSet(Lucene.Net.Analysis.Util.IResourceLoader, System.String, System.Boolean) Lucene.Net.Analysis.Util.AbstractAnalysisFactory.GetLines(Lucene.Net.Analysis.Util.IResourceLoader, System.String) Lucene.Net.Analysis.Util.AbstractAnalysisFactory.GetSnowballWordSet(Lucene.Net.Analysis.Util.IResourceLoader, System.String, System.Boolean) Lucene.Net.Analysis.Util.AbstractAnalysisFactory.SplitFileNames(System.String) Lucene.Net.Analysis.Util.AbstractAnalysisFactory.GetClassArg() Lucene.Net.Analysis.Util.AbstractAnalysisFactory.IsExplicitLuceneMatchVersion System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Analysis.Phonetic Assembly : Lucene.Net.Analysis.Phonetic.dll Syntax public class PhoneticFilterFactory : TokenFilterFactory, IResourceLoaderAware Constructors | Improve this Doc View Source PhoneticFilterFactory(IDictionary<String, String>) Creates a new PhoneticFilterFactory . Declaration public PhoneticFilterFactory(IDictionary<string, string> args) Parameters Type Name Description System.Collections.Generic.IDictionary < System.String , System.String > args Fields | Improve this Doc View Source ENCODER parameter name: either a short name or a full class name Declaration public static readonly string ENCODER Field Value Type Description System.String | Improve this Doc View Source INJECT parameter name: true if encoded tokens should be added as synonyms Declaration public static readonly string INJECT Field Value Type Description System.String | Improve this Doc View Source MAX_CODE_LENGTH Declaration public static readonly string MAX_CODE_LENGTH Field Value Type Description System.String Methods | Improve this Doc View Source Create(TokenStream) Declaration public override TokenStream Create(TokenStream input) Parameters Type Name Description Lucene.Net.Analysis.TokenStream input Returns Type Description Lucene.Net.Analysis.TokenStream Overrides Lucene.Net.Analysis.Util.TokenFilterFactory.Create(Lucene.Net.Analysis.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 Lucene.Net.Analysis.Util.IResourceLoader loader Implements Lucene.Net.Analysis.Util.IResourceLoaderAware See Also PhoneticFilter"
  }
}